package com.example.course.service;

import com.example.course.bean.Classes;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.course.dto.ClassesDTO;
import com.example.course.dto.ClassesQueryDTO;
import com.example.course.vo.ClassesVO;
import com.example.course.vo.StudentVO;

import java.util.List;

/**
 * @author Jasmine-drs
 * @description 针对表【classes(班级表)】的数据库操作Service
 * @createDate 2025-04-22 15:36:40
 */
public interface ClassesService extends IService<Classes> {

    /**
     * 获取班级列表，支持按条件查询和分页
     *
     * @param queryDTO 查询条件
     * @return 班级分页列表
     */
    Page<ClassesVO> getClassesList(ClassesQueryDTO queryDTO);

    /**
     * 添加班级，包含班级名重复检查
     *
     * @param classesDTO 班级信息
     * @return 添加后的班级信息
     * @throws IllegalArgumentException 当班级名已存在时抛出
     */
    ClassesVO addClass(ClassesDTO classesDTO);

    /**
     * 删除班级（物理删除）
     *
     * @param id 班级ID
     * @return 删除结果，true表示成功，false表示失败
     * @throws IllegalArgumentException 当班级不存在或班级中有学生时抛出
     */
    boolean deleteClass(Integer id);

    /**
     * 根据ID获取班级信息
     *
     * @param id 班级ID
     * @return 班级信息
     * @throws IllegalArgumentException 当班级不存在时抛出
     */
    ClassesVO getClassById(Integer id);

    /**
     * 获取班级内的学生列表
     *
     * @param id 班级ID
     * @return 学生列表
     * @throws IllegalArgumentException 当班级不存在时抛出
     */
    List<StudentVO> getStudentsByClassId(Integer id);
}
